package com.briup.springboot_web.web.controller;

import com.briup.springboot_web.bean.User;
import com.briup.springboot_web.exception.ServiceException;
import com.briup.springboot_web.service.IUserService;
import com.briup.springboot_web.util.Response;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Api(tags = "用户管理模块")
@RequestMapping("/user")
@RestController //RestFul  方法返回值信息添加响应体中
public class UserController {
    @Autowired //从ioc容器中获取接口类型的对象
    private IUserService service;

    //实现查询功能  GET  /user?id=1
    //GET /user/1
    @ApiOperation("根据id查询用户信息")
    @GetMapping("/{id}")
    public Response findById(@PathVariable Integer id){
        //1.调用service方法,可能产生异常
        User user = null;
        try{
            user = service.findById(id);
        }catch (Exception ex){
            //1.当异常发生时，打印异常控制台
            ex.printStackTrace();
            //2.响应错误的提示信息到前端
            if(ex instanceof ServiceException){//当异常类型为自定义业务异常，直接显示错误提示信息
                return Response.error(ex.getMessage());
            }
            return  Response.error("服务器内部错误，请联系客服");
        }
        return Response.success(user);
    }
    /*
    * 如何将一个查询方法中异常处理代码，转化成全局 异常处理？
    *  springMVC 提供注解 @RestControllerAdvice(增强web层处理异常的功能)
    *
    * */
    @ApiOperation("新增用户信息")
     @PostMapping
    public Response addUser(@RequestBody User user){
        service.addUser(user);
        return Response.success();
    }

}
